// vip/buy_vip.js
const api = require("../request/api")
const request = require("../request/request")
const util = require("../utils/util")
const App = getApp();
const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0';

Page({

    /**
     * 页面的初始数据
     */
    data: {
        barHeight: App.globalData.paddingTop,

        avatarUrl: defaultAvatarUrl,
        uid: '',
        user_name: '请点击登录',
        userInfo: {},
        fullUserInfo: {},
        mobile: '',
        isVip: false,
        openId: '',
        islogin: false,

        // 协议勾选标识
        if_read: false,
        chosen_index: 2,
        amount: 38.8,
        vipGoodId: 110,

        styledata: {
            "bg_color": "#fff",
            "color": "#000",
            "leftflag": true,
            "homeflag": true,
            "name": "会员充值"
        },

        // 手机授权弹框
        visible: false,
        // 地址选择弹框
        addressVisible: false,

        if_address: false,


        combo_list: [{
            title: '银卡订单',
            price: 1226,
            originPrice: '1300',
            // goodId: 222,
            goodId: 244,
            buytip: '1226',
            discount: ' 98折',
        },
        {
            title: '金卡订单',
            price: 3000,
            originPrice: '3800',
            // goodId: 223,
            goodId: 244,
            buytip: '3000',
            discount: ' 95折',
        },
        {
            title: '钻石订单',
            price: 6000,
            originPrice: '6500',
            // goodId: 224,
            goodId: 244,
            buytip: '6000',
            discount: ' 92折',
        }],

        current: 0,
        options: [
            // {
            //     value: 0,
            //     label: '单选',
            //     content: '描述信息描述信息描述信息描述信息描述信息描述信息描述信息描述信息描述信息描述信息',
            // },
        ],
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad: function (options) {

        const { chosenid, from } = options
        let combo_list = this.data.combo_list

        // 保存上一个页面来源
        this.from = from

        // 预先携带了充值会员的序号
        if (chosenid == 0 || chosenid) {
            this.setData({
                chosen_index: parseInt(chosenid),
                amount: combo_list[parseInt(chosenid)]['price'],
                vipGoodId: combo_list[parseInt(chosenid)]['goodId']
            })
        } else {
            this.setData({
                chosen_index: parseInt(2),
                amount: combo_list[parseInt(2)]['price'],
                vipGoodId: combo_list[parseInt(2)]['goodId']
            })
        }
        console.log("from", from);
        console.log(this.data.chosen_index, this.data.amount, this.data.vipGoodId);
        this.init_data()

        this.queryWmemberInfo()
    },

    init_data() {
        this.setData({
            uid: App.globalData.uid,
            userInfo: App.globalData.userInfo,
            avatar_url: App.globalData.fulluserInfo?.avatar || defaultAvatarUrl,
            user_name: App.globalData.fulluserInfo?.name || '游客',
            fullUserInfo: App.globalData.fulluserInfo,
            mobile: App.globalData.mobile,
            isVip: App.globalData.isVip
        })
    },

    setDefaultAvatar() {
        this.setData({
            avatar_url: defaultAvatarUrl
        })
    },

    // 变更地址
    onChange(event) {
        const { value } = event.detail;
        this.setData({ current: value });
        let current = this.data.current
        let aid = this.data.options[current]?.aid
        this.aid = aid
        this.closeAddress()
    },

    async get_address_list() {
        let params = {
            uid: this.data.uid
        }
        let res = await request.post(api.addresslist, params)
        // console.log("address", res);

        // 数据非数组格式 地址记录为空
        if (Array.isArray(res) == false) return util.showToast("地址数据格式有误")
        if (res.length == 0) return

        let optionAddress = []
        res.forEach((item, index) => {
            let itemAddress = {
                value: index,
                aid: item.id,
                label: `${item.accept_name} ${item.mobile}`,
                content: `${item.province_name} ${item.city_name} ${item.region_name} ${item.town_name} ${item.address}`,
            }
            optionAddress.push(itemAddress)

            // 勾选默认地址
            if (item.is_default && this.data.if_address == false) {
                console.log("this.data.if_address", this.data.if_address);
                this.setData({
                    current: index,
                    if_address: true
                })
            }
        });

        this.setData({
            options: optionAddress
        })

        // 没有默认地址 选第一个
        if (this.data.if_address == false) {
            this.setData({
                current: 0,
                if_address: true
            })
        }

        // 记录地址Id
        let current = this.data.current
        let aid = this.data.options[current]?.aid
        this.aid = aid
    },

    // 添加地址
    go_add_address() {
        let url = '/pages/address/add'
        wx.navigateTo({
            url,
        })
    },

    // 协议勾选回调
    selecting(e) {
        this.setData({
            if_read: !this.data.if_read
        })
    },

    // 切换会员购买框
    select_combo(e) {
        let index = e.currentTarget.dataset.index
        this.setData({
            chosen_index: index,
            amount: e.currentTarget.dataset.price,
            vipGoodId: e.currentTarget.dataset.goodid
        })
    },

    // 点击购买回调
    async buying_vip() {
        await this.queryWmemberInfo()
        // let mobile = this.wDetail?.allin_moblie ? this.wDetail.allin_moblie : ""
        let truename = this.wDetail?.true_name ? this.wDetail.true_name : ""
        if (truename == "") {
            wx.showModal({
                title: '认证提示',
                content: '升级金顶事业合伙人，需要先完成手机绑定和实名认证哦~',
                success(res) {
                    if (res.confirm) {
                        wx.navigateTo({
                            url: '/distribution/choice/choice?current=0',
                            success: (result) => {

                            },
                            fail: () => { },
                            complete: () => { }
                        });

                    } else if (res.cancel) {
                        util.showToast("取消认证")
                    }
                }
            })
            return
        }

        if (!this.data.if_read) {
            util.showToast('请先阅读并同意会员协议')
            return
        }

        console.log("this.aid", this.aid)

        // 未授权手机 拉起授权
        if (!App.globalData.mobile) {
            this.setData({
                visible: true
            })
            return
        }
        // 无地址 拉起地址弹框
        else if (!this.aid) {
            util.showToast("您还没有添加收货地址")
            let timer = setTimeout(() => {
                this.showAddressVisible()
                clearTimeout(timer)
            }, 1500);
            return
        }
        // 授权且带地址 执行支付流程
        else {
            this.paying()
        }
    },

    // 自定义弹出层取消按钮回调
    cancelMethod() {
        this.setData({
            visible: false
        })
    },

    // 手机授权弹出层点击空白处隐藏回调方法
    onVisibleChange(e) {
        this.setData({
            visible: e.detail.visible,
        });
    },

    // 地址选择弹出层点击空白处隐藏回调方法
    addressVisibleChange(e) {
        this.setData({
            addressVisible: e.detail.visible,
        });
    },

    showAddressVisible(e) {
        this.setData({
            addressVisible: true,
        });
    },

    closeAddress() {
        this.setData({
            addressVisible: false,
        });
    },

    // 手机授权按钮的回调
    async getrealtimePhoneNumber(e) {
        // console.log(e.detail.code)  // 拒绝：undefined 同意：code（和login的code不一样）
        // console.log(e.detail.errMsg) // 回调信息（成功失败都会返回）拒绝：fail user deny 同意：ok
        // console.log(e.detail.errno)  // 错误码（失败时返回）一般情况：undefined  使用次数上限：e.detail.errno===1400001

        // 先隐藏弹出层
        this.setData({
            visible: false
        })

        // 用户同意且未达使用次数上限
        if (e.detail.errno == undefined && e.detail.code) {
            // 成功手机号授权会返回 true
            let phoneflag = await App.setPhone(e.detail.code)
            // 成功后请求用户完整信息
            if (phoneflag) {
                // 成功获取最新完整用户信息
                let fullRes = await App.getMyFullInfo()
                if (fullRes) {
                    this.init_data()
                    this.paying()
                } else {
                    util.showFail('充值超时请稍后重新尝试')
                }
            }
        } else {
            util.showToast('您已取消充值')
        }
    },

    // 调起会员支付，新增会员商品订单。
    // 利用订单号获取微信支付信息，利用支付信息拉起微信支付
    paying() {
        let index = this.data.chosen_index
        let goods_num = 1
        switch (index) {
            case 0:
                goods_num = 1  // 银卡订单 1套
                break;
            case 1:
                goods_num = 5  // 金卡订单 5套
                break;
            case 2:
                goods_num = 10 // 钻石订单 10套
                break;
            default:
                break;
        }
        // 基本的请求参数信息
        let post_data = {
            uid: this.data.uid,
            aid: this.aid,
            type: 1,
            goods_id: this.data.vipGoodId,
            goods_sku_id: 23, // 先写死的套餐id
            // goods_id: 258,
            // goods_sku_id: 24, // 先写死的套餐id
            order_type: "memberorder",
            goods_num,
            novip: true // 会员充值不能使用会员折扣 配合后端使用
        }
        // 开始支付流程
        request.post(api.orderaddv3, post_data).then(res => {
            this.oid = res[0]
            let post_data = {
                id: res[0]
            }

            request.post(api.orderpay3, post_data).then(res => {
                this.wx_pay(res)
            })
        })
    },

    // 拉起微信支付
    wx_pay(res) {
        const that = this
        let post_data = res
        console.log(post_data);
        wx.navigateToMiniProgram({
            appId: 'wxef277996acc166c3', // 目标小程序的appid
            extraData: post_data,        // 需要传递给目标小程序的数据，可选
            success(res) {
                // 打开成功的回调
            },
            fail(err) {
                // 打开失败的回调
            }
        });


        // wx.requestPayment({
        //     nonceStr: post_data.nonceStr,
        //     package: post_data.package,
        //     paySign: post_data.paySign,
        //     timeStamp: post_data.timeStamp,
        //     signType: post_data.signType,
        //     success(res) {
        //         wx.showLoading({
        //             title: '充值成功跳转中',
        //         })
        //         let goodid = that.data.vipGoodId
        //         // console.log("goodid", goodid);
        //         let trueGrade = -1
        //         switch (goodid) {
        //             case 110:
        //                 trueGrade = 1
        //                 break;
        //             case 111:
        //                 trueGrade = 2
        //                 break;
        //             case 112:
        //                 trueGrade = 3
        //                 break;
        //             default:
        //                 trueGrade = 1
        //                 break;
        //         }
        //         // 原有会员，保留原级
        //         let oldGrade = App.globalData.VipGrade
        //         if (oldGrade >= trueGrade) {
        //             trueGrade = oldGrade
        //         }

        //         // 记录原过期时间
        //         let oldEndtime = App.globalData.fulluserInfo.end_time

        //         let times = 0
        //         let timerflag = setInterval(async () => {

        //             // App.globalData.fulluserInfo = fulluserInfo
        //             if (times >= 10) {
        //                 util.hideLoading()
        //                 clearInterval(timerflag)
        //                 util.showFail(
        //                     "用户信息更新超时，联系客服解决"
        //                 )
        //             }
        //             let infoFlag = await App.getMyFullInfo()
        //             if (infoFlag) {
        //                 let vipgrade = App.globalData.VipGrade
        //                 let newEndtime = App.globalData.fulluserInfo.end_time // 保证充值的时间更新

        //                 // console.log("vipgrade", vipgrade);
        //                 if (vipgrade == trueGrade && oldEndtime != newEndtime) {
        //                     clearInterval(timerflag)
        //                     util.hideLoading()
        //                     if (this.from) {
        //                         wx.navigateTo({
        //                             url: this.from,
        //                         });

        //                     } else {
        //                         wx.navigateBack({
        //                             delta: 1,
        //                         })
        //                     }

        //                 }
        //             } else {
        //                 util.hideLoading()
        //                 clearInterval(timerflag)
        //                 util.showFail(
        //                     "用户信息更新失败，请联系客服"
        //                 )
        //             }
        //             times++
        //         }, 1000);
        //     },
        //     fail(e) {
        //         util.showToast('您已取消充值');
        //     }
        // })
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady: function () {

    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow: function () {
        const that = this
        let returnOptions = wx.getEnterOptionsSync();

        console.log(returnOptions.scene, returnOptions.referrerInfo.appId, returnOptions.path);
        // 特殊说明：
        // 一般情况下wx.getEnterOptionsSync()中获取的extraData为收银台小程序返回的支付结果，
        // 但是当通过物理返回键或者通过半屏小程序右上角关闭退出（即未通过收银台小程序内按钮退出），
        // extraData内容会为空，调用方小程序会无法获得支付结果，该情况为微信小程序特性，小程序代码无法处理。
        // 如遇到该情况，通过判断场景值为1038且来源小程序为收银台小程序wxef277996acc166c3（上述代码加粗部分），
        // 即可认定为收银台返回，当前若extraData为空，则需要自行查询订单支付结果
        if (returnOptions.scene == '1038' && returnOptions.referrerInfo.appId == 'wxef277996acc166c3') {
            // 必须清除，否则会被自动保留下来，金顶的其他页面进入支付页也会跳提示。（未知bug）
            // 从收银台返回会重新获取，所以不影响判断支付结果
            returnOptions.scene = ""
            returnOptions.referrerInfo.appId = ""
            // 代表从收银台小程序返回
            let extraData = returnOptions.referrerInfo.extraData;
            console.log("extraData", extraData);
            if (!extraData) {
                // "当前通过物理按键返回，未接收到返参，建议自行查询交易结果";
                // util.showToast("物理按键返回，未获取支付结果")

                util.showLoading("支付结果检测中")
                setTimeout(async () => {
                    let oid = this.oid
                    let orderInfo = await request.post(api.orderdetail, { id: oid })
                    util.hideLoading()
                    console.log("orderInfo", orderInfo);
                    if (orderInfo.pay_status == 1) {
                        // 支付成功 
                        // "支付成功";
                        util.showToast("支付成功")
                        wx.showLoading({
                            title: '充值成功跳转中',
                        })
                        let goodid = that.data.vipGoodId
                        // console.log("goodid", goodid);
                        let trueGrade = -1
                        switch (goodid) {
                            case 110:
                                trueGrade = 1
                                break;
                            case 111:
                                trueGrade = 2
                                break;
                            case 112:
                                trueGrade = 3
                                break;
                            default:
                                trueGrade = 1
                                break;
                        }
                        // 原有会员，保留原级
                        let oldGrade = App.globalData.VipGrade
                        if (oldGrade >= trueGrade) {
                            trueGrade = oldGrade
                        }

                        // 记录原过期时间
                        let oldEndtime = App.globalData.fulluserInfo.end_time

                        let times = 0
                        let timerflag = setInterval(async () => {

                            // App.globalData.fulluserInfo = fulluserInfo
                            if (times >= 10) {
                                util.hideLoading()
                                clearInterval(timerflag)
                                util.showFail(
                                    "用户信息更新超时，联系客服解决"
                                )
                            }
                            let infoFlag = await App.getMyFullInfo()
                            if (infoFlag) {
                                let vipgrade = App.globalData.VipGrade
                                let newEndtime = App.globalData.fulluserInfo.end_time // 保证充值的时间更新

                                // console.log("vipgrade", vipgrade);
                                if (vipgrade == trueGrade && oldEndtime != newEndtime) {
                                    clearInterval(timerflag)
                                    util.hideLoading()
                                    if (this.from) {
                                        wx.navigateTo({
                                            url: this.from,
                                        });

                                    } else {
                                        wx.navigateBack({
                                            delta: 1,
                                        })
                                    }

                                }
                            } else {
                                util.hideLoading()
                                clearInterval(timerflag)
                                util.showFail(
                                    "用户信息更新失败，请联系客服"
                                )
                            }
                            times++
                        }, 1000);
                    } else {
                        // 支付取消
                        util.showToast("支付已取消")
                        // this.setData({ pay_waiting: true });
                    }
                }, 1000);

            } else {

                if (extraData.code == 'success') {

                    // "支付成功";
                    util.showToast("支付成功")
                    wx.showLoading({
                        title: '充值成功跳转中',
                    })
                    let goodid = that.data.vipGoodId
                    // console.log("goodid", goodid);
                    let trueGrade = -1
                    switch (goodid) {
                        case 110:
                            trueGrade = 1
                            break;
                        case 111:
                            trueGrade = 2
                            break;
                        case 112:
                            trueGrade = 3
                            break;
                        default:
                            trueGrade = 1
                            break;
                    }
                    // 原有会员，保留原级
                    let oldGrade = App.globalData.VipGrade
                    if (oldGrade >= trueGrade) {
                        trueGrade = oldGrade
                    }

                    // 记录原过期时间
                    let oldEndtime = App.globalData.fulluserInfo.end_time

                    let times = 0
                    let timerflag = setInterval(async () => {

                        // App.globalData.fulluserInfo = fulluserInfo
                        if (times >= 10) {
                            util.hideLoading()
                            clearInterval(timerflag)
                            util.showFail(
                                "用户信息更新超时，联系客服解决"
                            )
                        }
                        let infoFlag = await App.getMyFullInfo()
                        if (infoFlag) {
                            let vipgrade = App.globalData.VipGrade
                            let newEndtime = App.globalData.fulluserInfo.end_time // 保证充值的时间更新

                            // console.log("vipgrade", vipgrade);
                            if (vipgrade == trueGrade && oldEndtime != newEndtime) {
                                clearInterval(timerflag)
                                util.hideLoading()
                                if (this.from) {
                                    wx.navigateTo({
                                        url: this.from,
                                    });

                                } else {
                                    wx.navigateBack({
                                        delta: 1,
                                    })
                                }

                            }
                        } else {
                            util.hideLoading()
                            clearInterval(timerflag)
                            util.showFail(
                                "用户信息更新失败，请联系客服"
                            )
                        }
                        times++
                    }, 1000);

                } else if (extraData.code == 'cancel') {

                    // "支付已取消";
                    util.showToast("支付已取消")

                } else {
                    // "支付失败：" + extraData.errmsg;
                    util.showToast("支付失败")
                }
            }
        }

        this.get_address_list()
        // 检测是否有头像昵称修改
        let isVip = App.globalData.isVip
        let avatarUrl = App.globalData?.fulluserInfo?.avatar
        let nickName = App.globalData?.fulluserInfo?.name
        if (this.data.isVip != isVip || this.data.avatarUrl != avatarUrl || this.data.nickName != nickName) {
            this.init_data()
        }

        // 检测是否有个人信息
        if (!this.data.fullUserInfo?.name && this.data.uid) {
            this.get_myinfo()
        }
    },

    get_myinfo() {
        let params = {
            uid: this.data.uid
        }
        request.post(api.myinfo, params).then(res => {
            this.setData({
                fullUserInfo: res
            })
        })
    },

    // 查询提现人员详细信息
    async queryWmemberInfo() {
        let wDetail = await request.post(api.queryWmemberInfo, { uid: this.data.uid })
        console.log("提现人详情", wDetail);

        // 提现人员详情不显示在页面 无需记录在data中
        this.wDetail = wDetail ? wDetail : {}
    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide: function () {

    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload: function () {

    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh: function () {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom: function () {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage: function () {

    }
})